/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.com.cotelasa.scp.dominio.servicio.impl;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import pe.com.cotelasa.common.dao.excepcion.DAOException;
import pe.com.cotelasa.scp.dao.IDAOCotizacion;
import pe.com.cotelasa.scp.dominio.common.ESTADO_REGISTRO;
import pe.com.cotelasa.scp.dominio.common.ESTADO_RESULTADO;
import pe.com.cotelasa.scp.dominio.common.ResultadoServicio;
import pe.com.cotelasa.scp.dominio.excepcion.ServiceException;
import pe.com.cotelasa.scp.dominio.service.IServicioCotizacion;
import pe.com.cotelasa.scp.entidad.Articulo;
import pe.com.cotelasa.scp.entidad.Cotizacion;
import pe.com.cotelasa.scp.entidad.TipoCambio;

/**
 *
 * @author usuario
 */

@Service
public class ServicioCotizacionImpl implements IServicioCotizacion, Serializable{
    
    private static final long serialVersionUID = -3899534497036526573L;
    @Inject
    private IDAOCotizacion daoCotizacion;
    
    @Override
    public Collection<Cotizacion> listarCotizacionesActivos() throws ServiceException {
        try {
            return daoCotizacion.listarActivos(Cotizacion.class);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public Cotizacion conseguirCotizacionPorId(Integer idCotizacion) throws ServiceException {
        try {
            return daoCotizacion.obtenerEntidadPorId(Cotizacion.class, idCotizacion);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public ResultadoServicio guardarCotizacion(Cotizacion cotizacion) throws ServiceException {
        ResultadoServicio resultadoServicio = new ResultadoServicio(ESTADO_RESULTADO.EXITOSO);
        try {
            cotizacion.setEstadoRegistro(ESTADO_REGISTRO.ACTIVO.getValor());
            daoCotizacion.insertar(cotizacion);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
        return resultadoServicio;
    }

    @Override
    public ResultadoServicio actualizarCotizacion(Cotizacion cotizacion) throws ServiceException {
        ResultadoServicio resultadoServicio = new ResultadoServicio(ESTADO_RESULTADO.EXITOSO);
        try {
            daoCotizacion.actualizar(cotizacion);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
        return resultadoServicio;
    }

    @Override
    public Collection<Cotizacion> listarCotizacionesPorFiltro(Cotizacion cotizacion) throws ServiceException {
        try {
            return daoCotizacion.buscarCotizacionesPorFiltro1(cotizacion);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }
    
    @Override
    public Collection<Cotizacion> buscarCotizacionesPorFiltro(Cotizacion cotizacion,Date fechaInicio,Date fechaFinal) throws ServiceException{
        try {
                        
            return daoCotizacion.buscarCotizacionesPorFiltro(cotizacion,fechaInicio,fechaFinal);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    
    }
    
    
    @Override
    public Collection<Cotizacion> listarUltimasCotizacionesPorArticulo(Cotizacion cotizacion) throws ServiceException {
        try {
            return daoCotizacion.listarUltimasCotizacionesPorArticulo(cotizacion);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }
    
    @Override
    public Integer obtenerVersionDeCotizacion(Cotizacion cotizacion) throws ServiceException {
        Integer version = 0;
        try {
            version  = daoCotizacion.buscarCotizacionesPorArticulo(cotizacion).size();
            version++;
            return version;
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }
    
    @Override
    public Collection<Cotizacion> listarUltimasVersionesCotizacion(Cotizacion cotizacion) throws ServiceException {
        Collection<Cotizacion> lista = new ArrayList<Cotizacion>();
        Collection<Cotizacion> listaVersion = null;
        try {
            listaVersion = daoCotizacion.listarVersionesPorCotizacion(cotizacion);
            if(listaVersion != null){
                for(Cotizacion cot:listaVersion){
                    lista.add(daoCotizacion.obtenerUltimaVersion(cot));
                }
            }
            return lista;
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public String conseguirCodigoPorCotizacion(Cotizacion cotizacion) throws ServiceException {
        try {
            return daoCotizacion.obtenerUltimaVersion(cotizacion).getCodigo();
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }
    
    @Override
    public Cotizacion conseguirCotizaionPorCodigo(Cotizacion cotizacion) throws ServiceException {
        try {
            return daoCotizacion.obtenerUltimaVersion(cotizacion);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public Collection<Articulo> listarArticulosCotizados(Articulo articulo, int idEmpresa) throws ServiceException {
        try {
            return daoCotizacion.listarArticulosCotizados(articulo,idEmpresa);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }
   
    
}
